import axios from "axios";
import { getToken } from "./common";
import { message } from "antd";
import { createBrowserHistory } from "history";
const history = createBrowserHistory();
const request = axios.create({
  baseURL: import.meta.env.VITE_BASE_URL,
  timeout: 6000,
});

// 添加请求拦截器
request.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    if (getToken()) {
      config.headers.Authorization = `${getToken()}`;
    }
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
request.interceptors.response.use(
  function (res) {    
    switch (res.data.code) {
      case 401:
        message.error("登录过期!", 2, () => {
          history.replace("/login");
          history.go(0);
        });
        break;
      case 403:
        message.error("当前暂无权限!", 2, () => {
          history.replace("/login");
          history.go(0);
        });
        break;
      default:
        break;
    }
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return res;
  },
  function (error) {
    if (error.response) {
      console.log('Error response status:', error.response.status);
      console.log('Error response data:', error.response.data);
    }
    switch (error.response?.status) {
      case 401:
        message.error("登录过期!", 2, () => {
          history.replace("/login");
          history.go(0);
        });
        break;
      case 403:
        message.error("当前暂无权限!", 2, () => {
          history.replace("/login");
          history.go(0);
        });
        break;
      case 500:
        message.error("服务器内部错误!", 2, () => {
          history.replace("/login");
          history.go(0);
        });
        break;
      default:
        break;
    }
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);


export default request;
